In [30]:
import math
def funcion(x):
return (10*(math.sin(x+3))*(math.exp((x/2)+1)))
def biseccion(intA, intB, errorA, noMaxIter):
if(funcion(intA)*funcion(intB)<0):
print("---------------------------------------")
print("X0: ",intA," X1: ",intB)
print("No. max. iteraciones: ",noMaxIter)
print("Error aceptable: ",errorA)
noIter = 0
errorTmp = 1
intTmp = 0
oldInt = intA
while(noIter<noMaxIter and errorTmp>errorA and funcion(intTmp)!=0):
intTmp = (intB+intA)/2
if(funcion(intA)*funcion(intTmp)<0):
intB = intTmp
else:
intA = intTmp
noIter+=1
errorTmp=abs(intTmp-oldInt)
oldInt = intTmp
print("---------------------------------------")
print('La raíz es: ',intTmp)
print('F(raiz) es:' ,funcion(intTmp))
print('Error: ',errorTmp)
print('No. de iteraciones realizadas: ',noIter)
print("---------------------------------------")
else:
print('En el intervalo dado la función no presenta cambio de signo')
print('No hay raices que encontrar')
biseccion(-4,-2,math.pow(10,-15),1000)
biseccion(0,1,math.pow(10,-15),1000)
In [31]:
import math
def funcion(x):
return (10*(math.sin(x+3))*(math.exp((x/2)+1)))
def reglaFalsa(intA, intB, errorA, noMaxIter):
if(funcion(intA)*funcion(intB)<0):
print("---------------------------------------")
print("X0: ",intA," X1: ",intB)
print("No. max. iteraciones: ",noMaxIter)
print("Error aceptable: ",errorA)
noIter = 0
errorTmp = 1
intTmp = 0
oldInt = intA
try:
while(noIter<noMaxIter and errorTmp>errorA and funcion(intTmp)!=0):
intTmp = intA-((funcion(intA)*(intB-intA))/(funcion(intB)-funcion(intA)))
if(funcion(intA)*funcion(intTmp)>0):
intB = intTmp
else:
intA = intTmp
noIter+=1
errorTmp=abs((intTmp-oldInt)/intTmp)*100
oldInt = intTmp
print("---------------------------------------")
print('La raíz es: ',intTmp)
print('F(raiz) es:' ,funcion(intTmp))
print('Error: ',errorTmp)
print('No. de iteraciones realizadas: ',noIter)
print("---------------------------------------")
except ZeroDivisionError:
print("---------------------------------------")
print("¡División entre cero! : Posible raiz encontrada")
print('La raíz es: ',intTmp)
print('F(raiz) es:' ,funcion(intTmp))
print('Error: ',errorTmp)
print('No. de iteraciones realizadas: ',noIter)
print("---------------------------------------")
else:
print('En el intervalo dado la función no presenta cambio de signo')
print('No hay raices que encontrar')
reglaFalsa(-4,-2,math.pow(10,-15),10000)
reglaFalsa(0,1,math.pow(10,-15),10000)
In [32]:
import math
def funcion(x):
return (10*(math.sin(x+3))*(math.exp((x/2)+1)))
def funcionDeriv(x):
return (5*(math.exp((x/2)+1))*(math.sin(x+3)+(2*math.cos(x+3))))
def newtonRaphson(val, errorA, noMaxIter):
noIter = 0
errorTmp = 0
print("---------------------------------------")
print("Punto inicial: ",val)
print("No. max. iteraciones: ",noMaxIter)
print("Error aceptable: ",errorA)
while(noIter<noMaxIter):
valTmp = val-((funcion(val))/(funcionDeriv(val)))
if abs(valTmp-val) < errorA:
print("---------------------------------------")
print('La raíz es: ',valTmp)
print('F(raiz) es:' ,funcion(valTmp))
print('Error: ',abs(valTmp-val))
print('No. de iteraciones realizadas: ',noIter)
print("---------------------------------------")
break
errorTmp = abs(valTmp-val)
val = valTmp
noIter+=1
newtonRaphson(-4, math.pow(10,-15),10000)
newtonRaphson(0, math.pow(10,-15),10000)
In [33]:
import math
def funcion(x):
return (10*(math.sin(x+3))*(math.exp((x/2)+1)))
def secante(primerVal, segundoVal, errorA, noMaxIter):
noIter = 2
errorTmp = 0
valTmp = 0
print("---------------------------------------")
print("X0: ",primerVal," X1: ",segundoVal)
print("No. max. iteraciones: ",noMaxIter)
print("Error aceptable: ",errorA)
try:
while(noIter<noMaxIter):
valTmp = segundoVal-((funcion(segundoVal)*(segundoVal-primerVal))/(funcion(segundoVal)-funcion(primerVal)))
if abs(valTmp-segundoVal) < errorA:
print("---------------------------------------")
print('La raíz es: ',valTmp)
print('F(raiz) es:' ,funcion(valTmp))
print('Error: ',errorTmp)
print('No. de iteraciones realizadas: ',noIter)
print("---------------------------------------")
break
errorTmp = abs(valTmp-segundoVal)
primerVal = segundoVal
segundoVal = valTmp
errorTmp=abs(segundoVal-primerVal)
noIter+=1
except ZeroDivisionError:
print("---------------------------------------")
print("¡División entre cero! : Posible raiz encontrada")
print('La raíz es: ',valTmp)
print('F(raiz) es:' ,funcion(valTmp))
print('Error: ',errorTmp)
print('No. de iteraciones realizadas: ',noIter)
print("---------------------------------------")
secante(-4,-2,math.pow(10,-15),10000)
secante(0,1,math.pow(10,-15),10000)
Método | Intervalo | Error aceptable | No. Max iteraciones | Raíz encontrada | Error obtenido | No. Iter realizadas |
---|---|---|---|---|---|---|
Bisección | -4,-2 | 10^(-15) | 10000 | -3.0 | 0 | 1 |
Bisección | 0,1 | 10^(-15) | 10000 | 0.14159265358979334 | 8.881784197001252e-16 | 50 |
Falsa posición | -4,-2 | 10^(-15) | 10000 | -3.0 | 1.4802973661668752e-14 | 33 |
Falsa posición | 0,1 | 10^(-15) | 10000 | 0.14159265358979323 | 9.801206104957724e-14 | 12 |
Newton-Raphson | -4 | 10^(-15) | 10000 | 3.283185307179587 | 4.440892098500626e-16 | 6 |
Newton-Raphson | 0 | 10^(-15) | 10000 | 0.14159265358979342 | 1.1102230246251565e-16 | 4 |
Secante | -4,-2 | 10^(-15) | 10000 | -3.0 | 2.3591351094864876e-11 | 10 |
Secante | 0,1 | 10^(-15) | 10000 | 0.14159265358979314 | 1.303465946289606e-10 | 8 |